package com.tianzehua.socket.simpleexample;

import java.io.*;
import java.net.Socket;

/**
 * client socket
 * @author tianzhue
 * @date  2019/03/12
 */
public class ClientSocketBootstrap {

    public static void main(String[] args) throws Exception {
        /* 1、创建客户端Socket，指定服务器地址和端口 */
        Socket socket =new Socket("localhost",10086);
        /* 2、获取输出流，向服务器端发送信息 */
        /* 字节输出流 */
        OutputStream os = socket.getOutputStream();
        /* 将输出流包装成打印流 */
        PrintWriter pw = new PrintWriter(os);
        pw.write("用户名：admin；密码：123");
        pw.flush();
        /* socket.close() 或者调用socket.shutdownOutput();方法。
        调用这俩个方法，都会结束客户端socket。但是有本质的区别。
        socket.close() 将socket关闭连接，那边如果有服务端给客户端反馈信息，此时客户端是收不到的。
        而socket.shutdownOutput()是将输出流关闭，此时，如果服务端有信息返回，则客户端是可以正常接受的。 */
        socket.shutdownOutput();
        /* 3、获取输入流，并读取服务器端的响应信息 */
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String info;
        /* 判断是否读到了流的结尾 */
        while((info = br.readLine())!= null){
            System.out.println("我是客户端，服务器说："+info);
        }
        /* 4、关闭资源 */
        br.close();
        is.close();
        pw.close();
        os.close();
        socket.close();
    }
}
